博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSH网上商城四
阅读量:7231 次
发布时间:2019-06-29

本文共 10689 字,大约阅读时间需要 35 分钟。

第29课:10-SSH网上商城:购物模块的实体的封装

1、现在我们要实现购物车的模块,当用户在点击

加入购物车按钮的时候需要跳转到

 

上面我们需要对购物车的对象进行封装

上面一个商品就对应一个记录项,购物车中可以购买不同的商品,对应多个记录项,每一个记录项应该包含当前商品的信息,购买的数量 已经小计

我们来看具体对应的封装的实体类

package cn.itcast.shop.cart.beans;import cn.itcast.shop.product.beans.Product;/** * 购物项对象 * @author 传智.郭嘉 * */public class CartItem {    private Product product;    // 购物项中商品信息    private int count;            // 购买某种商品数量    private double subtotal;    // 购买某种商品小计    public Product getProduct() {        return product;    }    public void setProduct(Product product) {        this.product = product;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }    // 小计自动计算的.    public double getSubtotal() {        return count * product.getShop_price();    }    /*public void setSubtotal(double subtotal) {        this.subtotal = subtotal;    }    */    }

 

package cn.itcast.shop.cart.beans;import java.io.Serializable;import java.util.Collection;import java.util.LinkedHashMap;import java.util.Map;/** * 购物车对象 *  * @author 传智.郭嘉 *  */public class Cart implements Serializable{    // 购物车属性    // 购物项集合:Map的key就是商品pid,value:购物项    private Map
map = new LinkedHashMap
(); // Cart对象中有一个叫cartItems属性. public Collection
getCartItems(){ return map.values(); } // 购物总计: private double total; public double getTotal() { return total; } // 购物车的功能: // 1.将购物项添加到购物车 public void addCart(CartItem cartItem) { // 判断购物车中是否已经存在该购物项: /* * * 如果存在: * * 数量增加 * * 总计 = 总计 + 购物项小计 * * 如果不存在: * * 向map中添加购物项 * * 总计 = 总计 + 购物项小计 */ // 获得商品id. Integer pid = cartItem.getProduct().getPid(); // 判断购物车中是否已经存在该购物项: if(map.containsKey(pid)){ // 存在 CartItem _cartItem = map.get(pid);// 获得购物车中原来的购物项 _cartItem.setCount(_cartItem.getCount()+cartItem.getCount()); }else{ // 不存在 map.put(pid, cartItem); } // 设置总计的值 total += cartItem.getSubtotal(); } // 2.从购物车移除购物项 public void removeCart(Integer pid) { // 将购物项移除购物车: CartItem cartItem = map.remove(pid); // 总计 = 总计 -移除的购物项小计: total -= cartItem.getSubtotal(); } // 3.清空购物车 public void clearCart() { // 将所有购物项清空 map.clear(); // 将总计设置为0 total = 0; }}

 

这里需要注意的是在购物车的Cart类中封装了一个方法

// Cart对象中有一个叫cartItems属性.    public Collection
getCartItems(){ return map.values(); }

 

将购物车的购物项封装成一个set集合,这样在jsp页面的时候就可以对cartItems集合进行遍历,相当于在Cart类之后定义一个cartItems成员变量,提供了外界可以访问的get方法

 

接下来实现下面的功能:

我们点击的加入购物车的时候,需要跳转到对应的CartAction进行处理,并且要传递当前购买的数目过去,当前商品的ip

我们首先找到product.jsp页面,用户点击加入购物车的按钮

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %>
网上商城
正品保障
<%@ include file="menu.jsp" %>
&page=1">
&page=1">
编号:
商城价:
¥:
参 考 价:
促销:
限时抢购
"/>
购买数量:
">

 

接下来我们来传递到cart_addCart.action这个cart对应的action进行处理,对应的方法是addCart,该action中需要接受传递过来的商品pid,传递过来的购买的数目等

在action中需要依据商品的pid值查询得到商品的信息需要引入private ProductService productService;

我们来看看对应的代码

package cn.itcast.shop.cart.action;import org.apache.struts2.ServletActionContext;import cn.itcast.shop.cart.beans.Cart;import cn.itcast.shop.cart.beans.CartItem;import cn.itcast.shop.product.beans.Product;import cn.itcast.shop.product.service.ProductService;import com.opensymphony.xwork2.ActionSupport;/** * 购物车Action *  * @author 传智.郭嘉 *  */public class CartAction extends ActionSupport {    // 接收pid    private Integer pid;    // 接收数量count    private Integer count;    // 注入商品的Service    private ProductService productService;    public void setProductService(ProductService productService) {        this.productService = productService;    }    public void setPid(Integer pid) {        this.pid = pid;    }    public void setCount(Integer count) {        this.count = count;    }    // 将购物项添加到购物车:执行的方法    public String addCart() {        // 封装一个CartItem对象.        CartItem cartItem = new CartItem();        // 设置数量:        cartItem.setCount(count);        // 根据pid进行查询商品:        Product product = productService.findByPid(pid);        // 设置商品:        cartItem.setProduct(product);        // 将购物项添加到购物车.        // 购物车应该存在session中.        Cart cart = getCart();        cart.addCart(cartItem);        return "addCart";    }    // 清空购物车的执行的方法:    public String clearCart(){        // 获得购物车对象.        Cart cart = getCart();        // 调用购物车中清空方法.        cart.clearCart();        return "clearCart";    }        // 从购物车中移除购物项的方法:    public String removeCart(){        // 获得购物车对象        Cart cart = getCart();        // 调用购物车中移除的方法:        cart.removeCart(pid);        // 返回页面:        return "removeCart";    }        // 我的购物车:执行的方法    public String myCart(){        return "myCart";    }        /**     * 获得购物车的方法:从session中获得购物车.     * @return     */    private Cart getCart() {        Cart cart = (Cart) ServletActionContext.getRequest().getSession()                .getAttribute("cart");        if (cart == null) {            cart = new Cart();            ServletActionContext.getRequest().getSession()                    .setAttribute("cart", cart);        }        return cart;    }}

 

记得要在applicationContext-action.xml配置其生命周期

 

整个applicationContext-action.xml的代码为:

 

对应的在struct.xml中进行配置

/WEB-INF/jsp/msg.jsp
/WEB-INF/jsp/index.jsp
/WEB-INF/jsp/regist.jsp
/WEB-INF/jsp/regist.jsp
/WEB-INF/jsp/login.jsp
/WEB-INF/jsp/login.jsp
index
index
/WEB-INF/jsp/regist.jsp
/WEB-INF/jsp/product.jsp
/WEB-INF/jsp/productList.jsp
/WEB-INF/jsp/productList.jsp
/WEB-INF/jsp/cart.jsp
/WEB-INF/jsp/cart.jsp
/WEB-INF/jsp/cart.jsp
/WEB-INF/jsp/cart.jsp

 

接下来实现

 

 点击上面的清空购物车的功能

调用的是cart.jsp中的

 

点击上面途中的删除,调用的是cart.jsp中的

" class="delete">删除

 

在上面的action中已经做了详细的处理

转载于:https://www.cnblogs.com/kebibuluan/p/8335298.html

你可能感兴趣的文章
快速排序算法的实现
查看>>
傻瓜式入门Redux
查看>>
最新图解 如何提升phpstudy中的mysql版本
查看>>
华山论剑之iOS&tableView的双剑合璧
查看>>
4K超清,2500万人在线,猫晚直播技术全解读
查看>>
人人都能学会的python编程教程2:数据类型和变量
查看>>
支持获取 6.0+设备正在运行程序信息
查看>>
流计算框架 Flink 与 Storm 的性能对比
查看>>
JavaScript数据类型AND深拷贝和浅拷贝的不归路
查看>>
iOS逆向之旅(进阶篇) — HOOK(FishHook)
查看>>
Gradle 3.0.0设置Apk文件输出命名
查看>>
mac 使用php storm的基本配置
查看>>
装饰者模式
查看>>
集成计算引擎在大型企业绩效考核系统的应用方案
查看>>
150. Evaluate Reverse Polish Notation
查看>>
【C】 23_#error 和 #line 使用分析
查看>>
VUE的总结(1)
查看>>
SAP Cloud for Customer Extensibility的设计与实现
查看>>
服务器运维基础指南
查看>>
Vue 全站缓存之 keep-alive : 动态移除缓存
查看>>